package com.ruoyi.mq.kafka;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.BizLogMq;
import com.ruoyi.system.domain.SysDictData;
import com.ruoyi.system.service.IBizLogMqService;
import com.ruoyi.system.service.ISysDictDataService;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.*;
import java.util.regex.Pattern;

/**
 * <p>className: KafkaConsumer</p>
 * <p>description: MQ消费者 设置项目启动时就开始消费</p>
 *
 * @author CG
 * @version 1.0.0
 * @date 2019-08-27 10:00
 */

@Lazy(false)
@Component("com.ruoyi.mq.kafka.KafkaConsumer")
public class KafkaConsumer {
    
    private static Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);


    @Value("${kakfa.mq.topic:openresty-log}")
    private String mqTopic ;
    @Value("${kakfa.match.maxtime:1000}")
    private Long longTime ;

    @Autowired
    private ISysDictDataService dictDataService;
    @Autowired
    private IBizLogMqService bizLogMqService;

    @KafkaListener(topics= {"${kakfa.mq.topic:openresty-log}"})
    public void consumerMsg(ConsumerRecord<?,?> record){
        //logger.info("------------------------------------------consumerMsg---------------------------------");

        try {
            logger.info("----consumerMsg---offset:{}--record:{}",record.offset(), record);
            Optional<?> kafkaMsg = Optional.ofNullable(record.value());
            if(kafkaMsg.isPresent()){
                SysDictData dictData = new SysDictData();
                dictData.setDictType("my_rule");
                List<SysDictData> rules = dictDataService.selectDictDataList(dictData);

                Object msg = kafkaMsg.get();
                //logger.info("-------msg:{}",msg);
                String msgStr = msg.toString();
                JSONObject msgObj = JSONObject.parseObject(msgStr);
                //TODO 1 通过消息获取 cookie获取用户信息
                //2 将消息内容写入 DB 支持可视化查询 消息内容
                BizLogMq bizLogMq = new BizLogMq();
                bizLogMq.setStatus("1");

                //消息内容大小
                bizLogMq.setExt1(String.valueOf(record.serializedValueSize()));

                if(record.serializedValueSize() >0){
                    bizLogMq.setUri(msgObj.getString("http_referer"));
                    bizLogMq.setRemoteUser(msgObj.getString("remote_user"));
                    bizLogMq.setArgs(msgObj.getString("request_body"));
                    bizLogMq.setCreateBy("0");
                    bizLogMq.setMqTitle(String.valueOf(msgObj.getString("host")));
                    bizLogMq.setExt2(msgObj.getString("remote_addr"));
                }
                //3 支持规则匹配 并完成消息自定义的标识
                StringBuffer ruleRemark = new StringBuffer(String.valueOf(record.offset()));
                if(rules != null && rules.size() > 0){
                    ExecutorService executor = Executors.newFixedThreadPool(5);
                    List<Future> tasks = new ArrayList <Future>();
                    for (int i = 0;i < rules.size(); i++){
                        SysDictData rule = rules.get(i);
                        String dictVal = rule.getDictValue();
                        if(StringUtils.isEmpty(dictVal) ) {
                            continue;
                        }
                        //添加任务
                        Future future = executor.submit(new CgCallable(String.valueOf(tasks.size()),dictVal,msgStr));
                        //添加 至 tasks
                        tasks.add(future);
                    }

                    //监听 tasks 在指定时间内完成
                    CountDownLatch cdl = new CountDownLatch(tasks.size());
                    for(int k = 0;k < tasks.size(); k ++){
                        Future future = tasks.get(k);
                        Thread t = new Thread(new Runnable() {
                            @Override
                            public void run() {
                                String rs ="";
                                try {
                                    //在指定内完成匹配
                                    rs = future.get(longTime, TimeUnit.MILLISECONDS).toString();
                                } catch (InterruptedException e) {
                                    rs = "-1";
                                    future.cancel(true);
                                    logger.error("===InterruptedException==={}",e.getMessage(),e);
                                } catch (ExecutionException e) {
                                    rs = "-1";
                                    future.cancel(true);
                                    logger.error("===ExecutionException==={}",e.getMessage(),e);
                                } catch (TimeoutException e) {
                                    rs = "-1";
                                    future.cancel(true);
                                    logger.error("===TimeoutException==={}",e.getMessage(),e);
                                    return ;
                                }catch (Exception e) {
                                    rs = "-1";
                                    future.cancel(true);
                                    logger.error("===Exception==={}",e.getMessage(),e);
                                }finally {
                                    //线程计数器建议b
                                    cdl.countDown();
                                    ruleRemark.append(",").append(rs);
                                }


                            }
                        });

                        t.start();
                    }
                    //销毁线程池 保证不在添加任务
                    executor.shutdown();
                    //等待所有任务均已处理完成 或超时
                    cdl.await();
                }

                //内配符合规则
                if(ruleRemark.toString().contains(",1")){
                    bizLogMq.setMqType("1");
                }

                bizLogMq.setRemark(ruleRemark.toString());
                if(msgStr.length() >= 4000){
                    msgStr = msgStr.substring(0, 3800);
                }
                bizLogMq.setMqContent(msgStr);
                bizLogMqService.insertBizLogMq(bizLogMq);
                //4 支持可视化规则配置，并可以自动历史匹配并完成数据标识
            }
        } catch (Exception e) {
            logger.error(e.getMessage(),e);
        }


    }

    public int matchRexgex(String rex,String src){
        boolean exists = false;
        exists = Pattern.matches(rex, src);
        if(exists){
            return 1;
        }else{
            return 0;
        }
    }
    public boolean  matchRexgex(String src){
        boolean exists = false;
        String rex = "";
        exists = Pattern.matches(rex, src);

        return exists;
    }

    public static void main(String [] args) {
        String rex = ".*([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}.*";
        //".*(\\d{17}).*";//".*((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}.*";//".*[0-9]{11}.*";
        String src = "{\"host\":\"pangu.jieyue.com\",\"time_local\":\"11\\/Sep\\/2019:17:41:37 +0800\",\"resp_body\":\"{\\r\\n  \\\"retCode\\\" : \\\"0000\\\",\\r\\n  \\\"retDesc\\\" : \\\"成功\\\",\\r\\n  \\\"responseBody\\\" : {\\r\\n    \\\"pageParameter\\\" : {\\r\\n      \\\"pageSize\\\" : 20,\\r\\n      \\\"currentPage\\\" : 1,\\r\\n      \\\"totalPage\\\" : 0,\\r\\n      \\\"totalCount\\\" : 0\\r\\n    },\\r\\n    \\\"result\\\" : [ {\\r\\n      \\\"id\\\" : 1,\\r\\n      \\\"menuCode\\\" : \\\"home\\\",\\r\\n      \\\"menuName\\\" : \\\"工作台\\\",\\r\\n      \\\"menuIcon\\\" : \\\"2\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/home\\\",\\r\\n      \\\"parentId\\\" : \\\"0\\\",\\r\\n      \\\"orderBy\\\" : \\\"1\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 1,\\r\\n      \\\"resourceId\\\" : 2,\\r\\n      \\\"menuLevel\\\" : 1,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 2,\\r\\n      \\\"menuCode\\\" : \\\"system\\\",\\r\\n      \\\"menuName\\\" : \\\"系统管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\\",\\r\\n      \\\"parentId\\\" : \\\"0\\\",\\r\\n      \\\"orderBy\\\" : \\\"2\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 3,\\r\\n      \\\"menuLevel\\\" : 1,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 12,\\r\\n      \\\"menuCode\\\" : \\\"organizationManage\\\",\\r\\n      \\\"menuName\\\" : \\\"机构管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"1\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 13,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 43,\\r\\n      \\\"menuCode\\\" : \\\"orgManage\\\",\\r\\n      \\\"menuName\\\" : \\\"机构管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysorg\\/sysOrg\\/treeSysOrg.html\\\",\\r\\n      \\\"parentId\\\" : \\\"12\\\",\\r\\n      \\\"orderBy\\\" : \\\"1\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 44,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 44,\\r\\n      \\\"menuCode\\\" : \\\"postmanage\\\",\\r\\n      \\\"menuName\\\" : \\\"岗位管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysorg\\/sysPosition\\/querySysPosition.html\\\",\\r\\n      \\\"parentId\\\" : \\\"12\\\",\\r\\n      \\\"orderBy\\\" : \\\"2\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 45,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 45,\\r\\n      \\\"menuCode\\\" : \\\"userManage\\\",\\r\\n      \\\"menuName\\\" : \\\"用户管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysorg\\/sysUser\\/manageSysUser.html\\\",\\r\\n      \\\"parentId\\\" : \\\"12\\\",\\r\\n      \\\"orderBy\\\" : \\\"3\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 46,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 56,\\r\\n      \\\"menuCode\\\" : \\\"userUnlock\\\",\\r\\n      \\\"menuName\\\" : \\\"用户解锁\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/system\\/organizationManage\\/userUnlock\\\",\\r\\n      \\\"parentId\\\" : \\\"12\\\",\\r\\n      \\\"orderBy\\\" : \\\"4\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 57,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 13,\\r\\n      \\\"menuCode\\\" : \\\"operatePermission\\\",\\r\\n      \\\"menuName\\\" : \\\"操作权限\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"2\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 14,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 46,\\r\\n      \\\"menuCode\\\" : \\\"resourceManage\\\",\\r\\n      \\\"menuName\\\" : \\\"资源管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysauth\\/sysResource\\/treeSysResource.html\\\",\\r\\n      \\\"parentId\\\" : \\\"13\\\",\\r\\n      \\\"orderBy\\\" : \\\"1\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 47,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 47,\\r\\n      \\\"menuCode\\\" : \\\"roleManage\\\",\\r\\n      \\\"menuName\\\" : \\\"角色管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysauth\\/sysRole\\/sysRoleMain.html\\\",\\r\\n      \\\"parentId\\\" : \\\"13\\\",\\r\\n      \\\"orderBy\\\" : \\\"2\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 48,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 49,\\r\\n      \\\"menuCode\\\" : \\\"roleResourceAuthorizationManage\\\",\\r\\n      \\\"menuName\\\" : \\\"角色资源授权管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysauth\\/sysResource\\/addSysResourceForRole.html\\\",\\r\\n      \\\"parentId\\\" : \\\"13\\\",\\r\\n      \\\"orderBy\\\" : \\\"4\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 50,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 50,\\r\\n      \\\"menuCode\\\" : \\\"roleGroupManage\\\",\\r\\n      \\\"menuName\\\" : \\\"角色组管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysauth\\/sysrolegroup\\/querySysrolegroup.html\\\",\\r\\n      \\\"parentId\\\" : \\\"13\\\",\\r\\n      \\\"orderBy\\\" : \\\"5\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 51,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 14,\\r\\n      \\\"menuCode\\\" : \\\"permissionManage\\\",\\r\\n      \\\"menuName\\\" : \\\"业务权限管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"3\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 15,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 51,\\r\\n      \\\"menuCode\\\" : \\\"permissionRegist\\\",\\r\\n      \\\"menuName\\\" : \\\"业务权限注册\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/system\\/permissionManage\\/permissionRegist?nodeType=GridPanel\\\",\\r\\n      \\\"parentId\\\" : \\\"14\\\",\\r\\n      \\\"orderBy\\\" : \\\"1\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 52,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 52,\\r\\n      \\\"menuCode\\\" : \\\"virtualTreeManage\\\",\\r\\n      \\\"menuName\\\" : \\\"虚拟树管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/system\\/permissionManage\\/virtualTreeManage?nodeType=GridPanel\\\",\\r\\n      \\\"parentId\\\" : \\\"14\\\",\\r\\n      \\\"orderBy\\\" : \\\"2\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 53,\\r\\n      \\\"menuLevel\\\" : 3,\\r\\n      \\\"parentId1\\\" : \\\"2\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 15,\\r\\n      \\\"menuCode\\\" : \\\"parametterConfig\\\",\\r\\n      \\\"menuName\\\" : \\\"参数配置\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysConfig\\/querySysConfig.html\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"4\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 16,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 17,\\r\\n      \\\"menuCode\\\" : \\\"menuManage\\\",\\r\\n      \\\"menuName\\\" : \\\"菜单管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysMenu\\/treeSysMenu.html\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"6\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 18,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 18,\\r\\n      \\\"menuCode\\\" : \\\"dataDictionary\\\",\\r\\n      \\\"menuName\\\" : \\\"数据字典\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/platform\\/sysdict\\/sysDictMain.html\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"7\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 19,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 19,\\r\\n      \\\"menuCode\\\" : \\\"holidayManage\\\",\\r\\n      \\\"menuName\\\" : \\\"节假日管理\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/system\\/holidayManage\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"8\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 20,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 16,\\r\\n      \\\"menuCode\\\" : \\\"timedTaskQuery\\\",\\r\\n      \\\"menuName\\\" : \\\"定时任务查询\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/system\\/timedTaskQuery?nodeType=GridPanel\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"9\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 17,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 66,\\r\\n      \\\"menuCode\\\" : \\\"processManage\\\",\\r\\n      \\\"menuName\\\" : \\\"流程监控\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/system\\/processManage?nodeType=GridPanel\\\",\\r\\n      \\\"parentId\\\" : \\\"2\\\",\\r\\n      \\\"orderBy\\\" : \\\"9\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 67,\\r\\n      \\\"menuLevel\\\" : 2,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    }, {\\r\\n      \\\"id\\\" : 54,\\r\\n      \\\"menuCode\\\" : \\\"workbench.LandComMsgAlert\\\",\\r\\n      \\\"menuName\\\" : \\\"消息提醒\\\",\\r\\n      \\\"menuIcon\\\" : \\\"\\\",\\r\\n      \\\"menuUrl\\\" : \\\"\\/workbench\\/LandComMsgAlert?nodeType=GridPanel&hideInMenu=true\\\",\\r\\n      \\\"parentId\\\" : \\\"0\\\",\\r\\n      \\\"orderBy\\\" : \\\"12\\\",\\r\\n      \\\"validateState\\\" : \\\"1\\\",\\r\\n      \\\"appId\\\" : 0,\\r\\n      \\\"resourceId\\\" : 55,\\r\\n      \\\"menuLevel\\\" : 1,\\r\\n      \\\"parentId1\\\" : \\\"\\\"\\r\\n    } ]\\r\\n  }\\r\\n}\",\"http_referer\":\"http:\\/\\/pangu.jieyue.com\\/pangu\\/home.html\",\"status\":\"200\",\"request_time\":\"0.107\",\"remote_addr\":\"127.0.0.1\",\"request_body\":\"{\\\"dto\\\":{\\\"sortName\\\":\\\"id\\\",\\\"sortType\\\":\\\"asc\\\"}}\",\"uri\":\"\\/api\\/sysMenu\\/querySysMenuForHome\\/v1\",\"args\":\"reqMsg\",\"http_user_agent\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/75.0.3770.100 Safari\\/537.36\",\"body_bytes_sent\":\"8152\",\"upstream_response_time\":\"0.107\"})";

        KafkaConsumer test = new KafkaConsumer();
        System.out.println("==========="+test.matchRexgex(rex,src));

    }

}